The process of installing a peripheral device or an add-on type adapter board for use with a personal computer can be a relatively frustrating experience for the typical computer user. Nevertheless, a computer typically will not operate with a newly installed component until the user has completed a proper allocation of resources. Computer resources are allocated during a configuration process to permit the conflict-free use of the limited resources. To configure the computer, the user often must complete a relatively complex series of technical tasks. Thus, the difficulties faced by many users during the configuration process are emphasized by the absence of an automated process for resolving resource conflicts.
For many personal computers, neither the operating system nor the application programs running on the computer can determine which hardware components are connected to the computer. Likewise, the various hardware components connected to the computer often fail to detect the occurrence of a conflict between different hardware devices that attempt to share the same resource. Accordingly, a user typically must resolve a resource conflict by first identifying the problem and thereafter experimenting with hardware and software configurations in an attempt to correct the resource conflict.
When attempting to tackle hardware and software integration issues, the user is exposed to technical concepts that can be somewhat confusing for those without technical training, such as computer architecture issues, including hardware interrupts, direct memory access (DMA) channels, memory addresses, and input/output (I/O) ports. Likewise, many common configuration tasks require the user to be familiar with the finer details of the computer's operating system, including system configuration files, such as Autoexec.Bat, Config.Sys, and *.Ini files. In view of these technical concepts, some users find the configuration process so intimidating that they refuse to consider upgrading a component of their personal computer or connecting a new peripheral device to add a new capability to their computer.
Unlike today, early personal computers required minimum coordination between the computer hardware and software components. Users were presented with few difficult configuration issues after the initial installation of the computer. A limited number of peripheral devices were commercially available for supplementing the processing functions of the personal computer. In addition, early personal computers were primarily used for dedicated tasks, such as word processing or calculating financial information with a spreadsheet program, at a fixed desktop location.
In contrast, present computers are often portable systems that can be regularly connected to different peripheral devices and external systems. There exists many more computer peripheral devices that require the use of resources during computer operation than the limited quantity of available resources. Furthermore, a user can harness the powerful computing operations of a present personal computer to complete numerous tasks outside the traditional realm of word processing and financial calculations, such as graphics, audio, and video. For example, numerous peripheral devices and add-on systems are now commercially available to enable the user to customize the functions and operating characteristics of a personal computer. Docking-type computers enable a user to operate a mobile computer at either a base station or in remote locations. Thus, the rapid acceptance of portable computing and the multi-faceted uses of the personal computer emphasize the need for supplying a "user friendly" system that configures new hardware or software devices for use with the computer.
The Industry Standard Architecture (ISA) standard is a widely used bus architecture for personal computers. The ISA expansion bus, which is commonly associated with the IBM Personal Computer AT and other compatible computers, provides a 16-bit bus that supports the connection of adapter boards within the computer. The ISA bus structure requires allocation of resources, such as hardware interrupts, DMA channels, memory addresses, and I/O ports, among multiple ISA-compatible adapter boards connected to the ISA expansion bus. However, the ISA standard does not define a hardware or software mechanism for allocating those resources for use by the installed adapter boards. Consequently, configuration of the ISA adapter boards is typically completed by connecting jumper blocks or changing switch settings on the boards to change the decode maps for memory and I/O ports and to direct the DMA channels and interrupt signals to various pins along the expansion bus. Furthermore, system configuration program files of the operating system may need to be updated to reflect any modifications to the resource allocation.
Alternative expansion bus standards, such as the Micro Channel Architecture (MCA) and the Extended Industry Standard Architecture (EISA) standards, have limited hardware and software mechanisms to identify resources requested by a peripheral device and to resolve resource conflicts. However, these mechanisms are not implemented by the computer's operating system and are not compatible with the large installed base of personal computers based on the ISA standard. Furthermore, computers implementing the MCA and EISA standards are generally more expensive than ISA-compatible computers and lack the variety of add-on adapter boards and peripheral devices available for use with ISA-compatible computers.
To address the issue of configuration management, the computer industry is at present offering full-featured computers having preconfigured hardware and preinstalled software, thereby eliminating the need for a user to conduct the installation and configuration tasks for the purchased computer. However, this is a somewhat limited solution because vendors typically market a computer having a standard configuration of hardware and software components. Thus, this approach defeats the flexibility offered by the ISA bus expansion structure because users cannot obtain a computer capable of performing a customized function through this standardized configuration approach.
To overcome the frustration of users with present complicated configuration processes, it would be desirable to provide a system for automatically configuring a peripheral device or adapter board for a computer. A system is needed to enable a user to simply connect a device to the computer, turn on the computer, and have the device properly work with the computer. There is a further need for a system that determines the optimal configuration for its resources and enables application programs to fully utilize the available resources.
In recognition of the problems of prior configuration processes, the present invention provides a system that permits easy installation and configuration of devices which are capable of identifying themselves and declaring their services and resource requirements to the computer. The device identification and resource requirement information enable the system to determine and establish a working configuration for all devices connected to the computer, and to load the appropriate device drivers. In this manner, the present invention supports a variety of computer bus architectures and device classes. Accordingly, the present invention efficiently allocates system resources between the devices of the computer without substantial user intervention.